package com.ytt.core.service.service.user;

import com.ytt.core.model.common.PageDataDTO;
import com.ytt.core.model.common.SimpleDataDTO;
import com.ytt.core.model.user.UserDto;
import com.ytt.core.model.user.UserEditDTO;
import com.ytt.core.model.user.UserRegisterDTO;

/**
 * UserService
 *
 * @author chenwen
 * @date 2019/9/12 15:53
 */
public interface UserService {
    /**
     * 通过用户的登录账号查找用户ID
     *
     * @param account 用户账号
     * @return 用户ID，否则返回null
     */
    String findByAccount(String account);

    /**
     * 通过用户的邮箱账号查找用户ID
     *
     * @param mail 用户邮箱
     * @return 用户ID，否则返回null
     */
    String findByEmail(String mail);


    /**
     * 通过ID查找用户
     *
     * @param id 用户ID
     * @return 用户
     */
    UserDto findById(String id);

    /**
     * 创建用户信息
     *
     * @param userEditDTO 用户信息
     * @return 用户dto信息
     */
    UserDto create(UserEditDTO userEditDTO);


    /**
     * 用户注册
     * 
     * @param userRegisterDTO 用户信息
     * @return 用户dto信息
     */
    UserDto register(UserRegisterDTO userRegisterDTO);


    /**
     * 分页查询用户
     *
     * @param page 页号
     * @param size 每页纪录条数
     * @param sort 排序字段, 例如：字段1,asc,字段2,desc
     * @param name 用户名,支持模糊查询
     * @param filterPath 当前登录用户访问资源范围             
     * @return 用户dto信息集合
     */
    PageDataDTO<UserDto> findOnePage(int page, int size, String sort, String name,String filterPath);


    /**
     * 查询用户登录账号是否可用
     *
     * @param userId  用户id
     * @param account 用户账号
     * @return true 可用,false 不可用
     */
    SimpleDataDTO<Boolean> checkAccountAvailability(String userId, String account);


    /**
     * 修改用户信息
     *
     * @param id              用户id
     * @param userEditDTO 用户信息
     * @return 用户dto信息
     */
    UserDto update(String id, UserEditDTO userEditDTO);

    /**
     * 查询用户登录账号是否可用
     *
     * @param userId  用户id
     * @param email 邮箱
     * @return true 可用,false 不可用
     */
    SimpleDataDTO<Boolean> checkEmailAvailability(String userId, String email);


    /**
     * 删除用户
     *
     * @param userId 学校id
     */
    void delete(String userId);
}
